package utils

import (
	"fmt"
	"github.com/golang-jwt/jwt/v4"
	"time"
)

// JWT 相关常量
const (
	SecretKey       = "your_secret_key" // 请使用更复杂的密钥，并保存在环境变量中
	TokenExpiration = 24 * time.Hour    // 令牌过期时间
)

// 生成 JWT 令牌
func GenerateJWT(userID int, role int) (string, error) {
	claims := jwt.MapClaims{
		"ID":   userID,
		"role": role, // 新增字段：用户角色
		"exp":  time.Now().Add(TokenExpiration).Unix(),
	}

	token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
	return token.SignedString([]byte(SecretKey))
}

//func GenerateJWT(userID int) (string, error) {
//	claims := jwt.MapClaims{
//		"ID":  userID,
//		"exp": time.Now().Add(TokenExpiration).Unix(),
//	}
//
//	token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
//	return token.SignedString([]byte(SecretKey))
//}

func ParseString2Token(tokenString string) (tk *jwt.Token, err error) {
	tk, err = jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
		if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
			return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])
		}
		return []byte(SecretKey), nil // 使用和生成 JWT 时相同的密钥
	})
	return tk, err
}
